<?php
header("Content-type:text/html;charset=utf-8");

/**
 * 字符串截取，支持中文和其他编码
 * @static
 * @access public
 * @param string $str 需要转换的字符串
 * @param string $start 开始位置
 * @param string $length 截取长度
 * @param string $charset 编码格式
 * @param string $suffix 截断显示字符
 * @return string
 */
function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) {
    $String = new \Org\Util\String;
    return $String::msubstr($str,$start,$length,$charset,$suffix);
}


/**
 * 字符串截取，支持中文和其他编码
 * @param string $str 需要转换的字符串
 * @param string $start 开始位置
 * @param string $length 截取长度
 * @param string $suffix 截断显示字符
 * @param string $charset 编码格式
 * @return string
 */
function re_substr($str, $start=0, $length, $suffix=true, $charset="utf-8") {
    if(function_exists("mb_substr"))
        $slice = mb_substr($str, $start, $length, $charset);
    elseif(function_exists('iconv_substr')) {
        $slice = iconv_substr($str,$start,$length,$charset);
    }else{
        $re['utf-8']   = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
        $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
        $re['gbk']  = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
        $re['big5']   = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
        preg_match_all($re[$charset], $str, $match);
        $slice = join("",array_slice($match[0], $start, $length));
    }
    $omit=mb_strlen($str) >=$length ? '...' : '';
    return $suffix ? $slice.$omit : $slice;
}


/**
 * 取得根域名
 * @param type $domain 域名
 * @return string 返回根域名
 */
function get_url_to_domain($domain) {
    $re_domain = '';
    $domain_postfix_cn_array = array("com", "net", "org", "gov", "edu", "com.cn", "cn");
    $array_domain = explode(".", $domain);
    $array_num = count($array_domain) - 1;
    if ($array_domain[$array_num] == 'cn') {
        if (in_array($array_domain[$array_num - 1], $domain_postfix_cn_array)) {
            $re_domain = $array_domain[$array_num - 2] . "." . $array_domain[$array_num - 1] . "." . $array_domain[$array_num];
        } else {
            $re_domain = $array_domain[$array_num - 1] . "." . $array_domain[$array_num];
        }
    } else {
        $re_domain = $array_domain[$array_num - 1] . "." . $array_domain[$array_num];
    }
    return $re_domain;
}


/**
 * 获取一定范围内的随机数字
 * 跟rand()函数的区别是 位数不足补零 例如
 * rand(1,9999)可能会得到 465
 * rand_number(1,9999)可能会得到 0465  保证是4位的
 * @param integer $min 最小值
 * @param integer $max 最大值
 * @return string
 */
function rand_number ($min=1, $max=9999) {
    return sprintf("%0".strlen($max)."d", mt_rand($min,$max));
}



/**
 *  图片上传
 * @return string 上传后的图片名
 */
function upload_image($path,$maxSize=52428800,$files){
    ini_set('max_execution_time', '0');
    // 去除两边的/
    $path=trim($path,'.');
    $path=trim($path,'/');
    $config=array(
        'rootPath'  =>'Upload/',         //文件上传保存的根路径
        'savePath'  => '../'.$path.'/',
        'exts'      => array('jpg', 'gif', 'png', 'jpeg','bmp'),
        'maxSize'   => $maxSize,
        'autoSub'   => true,
        );
    $upload = new \Think\Upload($config);// 实例化上传类
    /*modify by 大业|20160827|增加了files传参,以便对上传文件可控.*/
    if(empty($files)){
        $info = $upload->upload();
        //错误调试
        //dump($upload->getError());
    }else{
        $info = $upload->upload($files);
    }

    if($info) {
        foreach ($info as $k => $v) {
            $data[]=trim($v['savepath'],'.').$v['savename'];
        }
        return $data;
    }else{
    	return array();
    }
}


/**
 * 使用curl获取远程数据
 * @param  string $url url连接
 * @return string      获取到的数据
 */
function curl_get_contents($url,$data,$type){
    $ch=curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);                //设置访问的url地址
    //curl_setopt($ch,CURLOPT_HEADER,1);                //是否显示头部信息
    if(!empty($type)){
    	curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data );
    }
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);               //设置超时
    curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_);   //用户访问代理 User-Agent
    curl_setopt($ch, CURLOPT_REFERER,_REFERER_);        //设置 referer
    curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);          //跟踪301
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        //返回结果
    if(!empty($data)){
    	curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data );
    }
    $r=curl_exec($ch);
    curl_close($ch);
    return $r;
}


/**
 * 将文件以提示框的形式,下载到本地
 * @date:       2016-7-11
 * @author:     大业
 * @param:      string $file 文件全路径
 * @param:      string $content_type 下载文件类型
 * @return:     void
 */
function header_download($file,$content_type)
{
    //清空缓存区并关闭
    ob_end_clean();
    //使用Header()函数设置页面编码，避免出现乱码
    header("Content-Type:text/html;charset=gb2312");//
    // 禁止客户端浏览器使用缓存
    header("Cache-Control: no-cache, must-revalidate");
    // 参数（与以前的服务器兼容）,即兼容HTTP1.0协议
    header("Pragma: no-cache");
    //设置要下载的文件类型
    //header("Content-type:".$content_type);
    header("Content-type:application/octet-stream");
    //设置要下载文件的文件大小
    header("Content-Length:" . filesize($file));
    // 长度单位
    header("Accept-Ranges: bytes");
    //设置要下载文件
    header("Content-Disposition: attachment; filename=".basename($file));
    //下载的文件
    @readfile($file);

    //删除原文件
    //@unlink($file);
    //exit;
    /*
        content_type---常用文件类型：
        'chm'=>'application/octet-stream',
        'ppt'=>'application/vnd.ms-powerpoint',
        'xls'=>'application/vnd.ms-excel',
        'doc'=>'application/msword',
        'exe'=>'application/octet-stream',
        'rar'=>'application/octet-stream',
        'js'=>"javascrīpt/js",
        'css'=>"text/css",
        'bin'=>"application/octet-stream",
        'pdf'=>"application/pdf",
        'rtf'=>"application/rtf",
        'mif'=>"application/x-mif",
        'src'=>"application/x-wais-source",
        'zip'=>"application/zip",
        'tar'=>"application/x-tar",
        'gif'=>"image/gif",
        'jpeg'=>"image/pjpeg",
        'jpg'=>"image/pjpeg",
        'jpe'=>"image/pjpeg",
        'ras'=>"image/x-cmu-raster",
        'txt'=>"text/plain",
        'html'=>"text/html",
        'htm'=>"text/html",
        'htl'=>"text/html",
        'wav'=>"audio/x-wav",
        ".bmp"="application/x-bmp"
        ".jpe"="image/jpeg"
        ".jpe"="application/x-jpe"
        ".jpeg"="image/jpeg"
        ".jpg"="image/jpeg"
        ".jpg"="application/x-jpg"
        ".js"="application/x-javascript"
        ".jsp"="text/html"
        ".pdf"="application/pdf"
        ".png"="image/png"
    */
}


/**
 * [判断是否为手机浏览器]
 * @method isMobile
 * @author 大业
 * @create 2016-09-12
 * @return bool [true/false]
 */
function isMobile()
{
    $useragent=isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
    $useragent_commentsblock=preg_match('|\(.*?\)|',$useragent,$matches)>0?$matches[0]:'';

    $mobile_os_list=array('Google Wireless Transcoder','Windows CE','WindowsCE','Symbian','Android','armv6l','armv5','Mobile','CentOS','mowser','AvantGo','Opera Mobi','J2ME/MIDP','Smartphone','Go.Web','Palm','iPAQ');

    $mobile_token_list=array('Profile/MIDP','Configuration/CLDC-','160×160','176×220','240×240','240×320','320×240','UP.Browser','UP.Link','SymbianOS','PalmOS','PocketPC','SonyEricsson','Nokia','BlackBerry','Vodafone','BenQ','Novarra-Vision','Iris','NetFront','HTC_','Xda_','SAMSUNG-SGH','Wapaka','DoCoMo','iPhone','iPod');

    $found_mobile=CheckSubstrs($mobile_os_list,$useragent_commentsblock) || CheckSubstrs($mobile_token_list,$useragent);

    if ($found_mobile){
        return true;
    }else{
        return false;
    }
}

/**
 * [检查传入值是否存在列表中(原手机判断中的代码)]
 * @method CheckSubstrs
 * @author 大业
 * @create 2016-09-12
 * @param  [type] $substrs [description]
 * @param  [type] $text [description]
 */
function CheckSubstrs($substrs,$text)
{
    foreach($substrs as $substr){
        if(false!==strpos($text,$substr)){
            return true;
        }
    }
    return false;
}


/**
 * [格式化var_dump输出]
 * @method querySMS
 * @author 大业
 * @create 2016-08-18
 * @param  [array] $data [要美化的数据]
 * @return [string] [短信内容]
 */
function dd($data)
{
    // 定义样式
    $str='<pre style="display: block;padding: 9.5px;margin: 44px 0 0 0;font-size: 13px;line-height: 1.42857;color: #333;word-break: break-all;word-wrap: break-word;background-color: #F5F5F5;border: 1px solid #CCC;border-radius: 4px;">';
    // 如果是boolean或者null直接显示文字；否则print
    if (is_bool($data)) {
        $show_data=$data ? 'true' : 'false';
    }elseif (is_null($data)) {
        $show_data='null';
    }else{
        $show_data=print_r($data,true);
    }
    $str.=$show_data;
    $str.='</pre>';
    echo $str;
}
